Common Lisp

Lisp的方言

Common Lisp,缩写为 CL(不要和缩写同为CL的组合逻辑混淆),是Lisp的众多方言之一,与Scheme合称现代两大Lisp方言,标准由ANSI X3.226-1994定义。它是为了标准化此前众多的Lisp分支而开发的,导致其语言规范和标准长达千页。要注意,它本身并不是一个具体的实现,而是各个Lisp实现所遵循的规范。它操作的数据是动态数据类型,但也可用类型声明来提高效率和增强安全性。

简介
Common Lisp是一个现代的,多重范式的,高性能,可编译的标准化ANSI编程语言。相对于各种嵌入在特定产品中的Lisp方言,例如Emacs Lisp 和 AutoLISP,Common Lisp 是一种通用用途的编程语言。不像很多早期的Lisp,Common Lisp同Scheme一样,变量有作用域
Common Lisp具有高度灵活性,对象化编程以及快速的框架能力提供优异的支持。同时它还提供强大的宏能力,使编程者在编码时定制自己的应用,并给编程者提供了高度灵活的运行环境,可在运行时修改和调试程序。 其多重范式语言特性还允许编程者选择适当的方法和范式适应编写的应用程序。
语法
Common Lisp 是一种 Lisp; 它使用 前置标识表达式(前标式) 来表示代码和数据。 函数(function)和宏(macro)也以前标式的形式写出,前标式的第一项是函数名或者宏名,就像在这些例子中:
>(+ 2 2) ; 将 2 加上 2, 得 4
; 定义一个函数用来计算一个数的平方:
>(defun square (x) (* x x))
; 执行这个函数:
当求值器遇到一式形如 (F A1 A2...),那么名为 F 的符号被认为是如下之一:
如果 F 是函数名,那么参数 A1, A2,...,An 被从左到右依次求值,然后找到函数定义,并把这些值作为参数调用这个函数。如果F是特殊操作符,那么A1,A2,...,An是否会被求值以及求值顺序会由操作符决定,比如
>(if oddp x) ; 在x是奇数时返回t,否则返回nil
上述代码在求值时会在求值if后先求值条件式(第一个参数),条件式求值结果为t,则求值第二个参数,否则不求值第二个参数,直接求值第三个参数。
则是可以让用户完全自定义求值规则,换句话说,写一种新的语言。
特点介绍
Common Lisp 是一个多重范式编程语言,这表现在:
支持各种编程技术:过程编程,函数编程和面向对象编程。
动态数据类型,但也可用类型声明来提高效率和增强安全性。
可以通过一些标准特性来扩展,例如 Lisp宏(程序自我进行的编译时代码重排 (compile-time code rearrangement accomplished by the program itself))和 阅读器宏(赋予用户自定义的保留字以特殊意义的符号扩展 (extension of syntax to give special meaning to characters reserved for users for this purpose))。
详情
Common Lisp 拥有丰富的数据类型。
数据类型
数字类型包括整数,分数,浮点数,和复数。Common Lisp 使用 bignum 来表示任意长度和精度的数值。分数类型精确地表示分数,这是很多语言都不具备的能力。 Common Lisp 自动将数值转换成适当的类型。
Common Lisp 字符 类型并不仅仅是 ASCII 字符,这是因为 Lisp 在 ASCII 出现前就存在了。 一些现代的实现默认使用Unicode字符。
内名(Symbol)类型是Lisp语言共有的,而在其它语言中就较少见。一个内名是一个数据对象的唯一命名。与其它语言中的标识符(Identifier)类似,Lisp中的内名可以用作变量名,但它们也是可以独立使用的一种数据对象。一般来说,对一个内名求值时会得到以该内名为名的变量的值,但也有例外:形如:foo的关键词内名的值就是它本身,而内名T和NIL则分别表示布尔逻辑真与布尔逻辑假。
数据结构
Common Lisp 的顺序类型包括链表(lists),向量(vectors), 位向量(bit-vectors),和字符串(strings)。
同任何其他的Lisp一样,Common Lisp中的基本数据单位称作 首.尾(conses,有时候叫做cons cells 或者 pairs)。一个 首.尾 就是拥有两个槽的数据结构,这两个槽被称作 首(car) 和 尾(cdr)。
函数
在 Common Lisp 里, 函数 是一种数据类型。 例如,可以写出以一个函数作为参数的函数,同时函数的返回值也可以是函数--这种函数称为高阶函数。这就让用函数描述非常通用的操作成为可能。
Common Lisp 的库高度依赖这种高阶函数。 例如,sort(排序)函数用一个 比较操作符 作为他的参数之一。这样一来,这个函数就不但可以用来对任何类型的数据排序,还可以根据一个关键码对数据结构排序。
>(sort (list 5 2 6 3 1 4) #'>)
; 使用函数 >来排序,也就是按大小从大排到小排序
; 结果是 (6 5 4 3 2 1).
>(sort (list 9 a) '(3 b) '(4 c))
#'(lambda (x y) (< (car x) (car y)))
; 根据子链表的第一个,按照从小到大排序
; 结果是 ((3 b) (4 c) (9 a)).
这一求值模型对于函数很简单。
定义函数
宏 defun 用来定义函数。 函数定义给出了函数名,参数名和函数体
>(defun square (x)(* x x))
函数定义中可以包括 “声明”,它可以指示编译器优化设置或参数的数据类型等。还可以在函数定义中包括“文档字符串”(vdocstrings),Lisp 系统用它们形成交互式文档:
>(defun square x)
(declare (number x) (optimize (speed 3) (debug 0) (safety 1)))
(* x x)
匿名函数用 lambda 表达式定义。Lisp 编程频繁使用高阶函数,以匿名函数作为其参数的作法十分有效。
还有一些有关于函数定义和函数操作的运算符。如,操作符 compile 可以用来重新编译函数。(一些Lisp系统默认下在解释器里运行函数,除非指示编译它;其他Lisp系统在函数输入时即被编译。)
函数名字空间
函数的名字空间与数据变量的名字空间是分离的。这是 Common Lisp 和Scheme编程语言的一个重要不同之处。 在函数名字空间定义名字的操作符包括 defun,flet,和 labels。
要用函数名把函数作为参数传给另一个函数,必须使用function特殊操作符,通常简略为 #'。上文第一个 sort 的例子中,为了引用在函数名字空间名为 > 的函数,使用了代码 #'>。
为函数提供分离的名字空间是否有益是 Lisp 社区不断争论的主题之一,常被称为 “Lisp-1 与 Lisp-2 辩论”。这些名称出现于Richard P. Gabriel 和 Kent Pitman 1998 年的一篇论文,文中广泛的比较了这两种方法。
实现
Common Lisp 是由一份技术规范定义而不是被某一种具体实现定义(前者的例子有Ada语言和C语言,后者有Perl语言)。 存在很多种实现,语言标准详细阐明了可能导致合理歧义的内容。
另外,各种实现试图引入库包来提供标准没有提及的功能。可移植的自由软件库提供了各种特性,Common-Lisp net 和 Common Lisp Open Code Collection 项目。
Common Lisp 设计为由增量编译器实现。 优化编译的标准声明(例如内联函数)已进入语言规范的计划。 大多数Lisp实现将函数编译成原生的机器语言。其他的编译器编译为通用二进制码,虽有损软件运行效率但通用性好。由于Lisp提供了交互式的提示符以及函数增量式的依次编译,很多人误会为Lisp是纯解释语言
一些基于Unix的实现,例如CLISP,可以作为脚本解释器使用;因此,系统可以像调用Perl 或者Unix shell解释器一样透明的调用它。
免费的可重发布实现:
商业实现
在这里Franz, Inc.,Xanalys Corp.,Digitool, Inc.,Corman Technologies and Scieneer Pty Ltd.。
应用
Common Lisp 被用于很多成功的商业系统,最著名的(毫无疑问要归功于Paul Graham的推广)要数Yahoo! 商店的站点。其他值得一提的例子有:
Orbitz,以旅行书籍为主的站点
Mirai,Izware LLC's fully integrated 2d/3d computer graphics content creation suite that features what is almost universally regarded as the best polygonal modeler in the industry, an advanced IK/FK and non-linear animation system (later popularized by such products as Sega's Animanium and Softimage XSI, respectively), and advanced 2d and 3d painting. It is used in major motion pictures(most famously in New Line Cinema's Lord of the Rings), video games and military simulations.
Piano,一个用Lisp写的商业的航空期前期设计包以及与它的竞争对手的比较
Xanalys Corp.的调查软件,被全球的警察,安全部门和防止诈骗服务部门采用
Genworks International的多用途说明语言(GDL),是一个基于CL的开发工具,用来创建基于web的工程,设计和商业应用
也有很多成功的开源应用用Common Lisp写成,例如:
Applicative Common Lisp,a full-featured theorem prover for a subset of Common Lisp.
Maxima,a sophisticated computer algebra system。
Compo,a language allowing complex musical structures to be described in a natural way.
同样,Common Lisp也被许多政府和非盈利组织采用。NASA中的例子有:
SPIKE,the Hubble Space Telescope planning and scheduling system.
Remote Agent,winner of the 1999 NASA Software of the Year Award.
全国各地天气预报查询

上海市

  • 市辖区
  • 云南省

  • 临沧市
  • 云南省

  • 丽江市
  • 云南省

  • 保山市
  • 云南省

  • 大理白族自治州
  • 云南省

  • 德宏傣族景颇族自治州
  • 云南省

  • 怒江傈僳族自治州
  • 云南省

  • 文山壮族苗族自治州
  • 云南省

  • 昆明市
  • 云南省

  • 昭通市
  • 云南省

  • 普洱市
  • 云南省

  • 曲靖市
  • 云南省

  • 楚雄彝族自治州
  • 云南省

  • 玉溪市
  • 云南省

  • 红河哈尼族彝族自治州
  • 云南省

  • 西双版纳傣族自治州
  • 云南省

  • 迪庆藏族自治州
  • 内蒙古自治区

  • 乌兰察布市
  • 内蒙古自治区

  • 乌海市
  • 内蒙古自治区

  • 兴安盟
  • 内蒙古自治区

  • 包头市
  • 内蒙古自治区

  • 呼伦贝尔市
  • 内蒙古自治区

  • 呼和浩特市
  • 内蒙古自治区

  • 巴彦淖尔市
  • 内蒙古自治区

  • 赤峰市
  • 内蒙古自治区

  • 通辽市
  • 内蒙古自治区

  • 鄂尔多斯市
  • 内蒙古自治区

  • 锡林郭勒盟
  • 内蒙古自治区

  • 阿拉善盟
  • 北京市

  • 市辖区
  • 吉林省

  • 吉林市
  • 吉林省

  • 四平市
  • 吉林省

  • 延边朝鲜族自治州
  • 吉林省

  • 松原市
  • 吉林省

  • 白城市
  • 吉林省

  • 白山市
  • 吉林省

  • 辽源市
  • 吉林省

  • 通化市
  • 吉林省

  • 长春市
  • 四川省

  • 乐山市
  • 四川省

  • 内江市
  • 四川省

  • 凉山彝族自治州
  • 四川省

  • 南充市
  • 四川省

  • 宜宾市
  • 四川省

  • 巴中市
  • 四川省

  • 广元市
  • 四川省

  • 广安市
  • 四川省

  • 德阳市
  • 四川省

  • 成都市
  • 四川省

  • 攀枝花市
  • 四川省

  • 泸州市
  • 四川省

  • 甘孜藏族自治州
  • 四川省

  • 眉山市
  • 四川省

  • 绵阳市
  • 四川省

  • 自贡市
  • 四川省

  • 资阳市
  • 四川省

  • 达州市
  • 四川省

  • 遂宁市
  • 四川省

  • 阿坝藏族羌族自治州
  • 四川省

  • 雅安市
  • 天津市

  • 市辖区
  • 宁夏回族自治区

  • 中卫市
  • 宁夏回族自治区

  • 吴忠市
  • 宁夏回族自治区

  • 固原市
  • 宁夏回族自治区

  • 石嘴山市
  • 宁夏回族自治区

  • 银川市
  • 安徽省

  • 亳州市
  • 安徽省

  • 六安市
  • 安徽省

  • 合肥市
  • 安徽省

  • 安庆市
  • 安徽省

  • 宣城市
  • 安徽省

  • 宿州市
  • 安徽省

  • 池州市
  • 安徽省

  • 淮北市
  • 安徽省

  • 淮南市
  • 安徽省

  • 滁州市
  • 安徽省

  • 芜湖市
  • 安徽省

  • 蚌埠市
  • 安徽省

  • 铜陵市
  • 安徽省

  • 阜阳市
  • 安徽省

  • 马鞍山市
  • 安徽省

  • 黄山市
  • 山东省

  • 东营市
  • 山东省

  • 临沂市
  • 山东省

  • 威海市
  • 山东省

  • 德州市
  • 山东省

  • 日照市
  • 山东省

  • 枣庄市
  • 山东省

  • 泰安市
  • 山东省

  • 济南市
  • 山东省

  • 济宁市
  • 山东省

  • 淄博市
  • 山东省

  • 滨州市
  • 山东省

  • 潍坊市
  • 山东省

  • 烟台市
  • 山东省

  • 聊城市
  • 山东省

  • 菏泽市
  • 山东省

  • 青岛市
  • 山西省

  • 临汾市
  • 山西省

  • 吕梁市
  • 山西省

  • 大同市
  • 山西省

  • 太原市
  • 山西省

  • 忻州市
  • 山西省

  • 晋中市
  • 山西省

  • 晋城市
  • 山西省

  • 朔州市
  • 山西省

  • 运城市
  • 山西省

  • 长治市
  • 山西省

  • 阳泉市
  • 广东省

  • 东莞市
  • 广东省

  • 中山市
  • 广东省

  • 云浮市
  • 广东省

  • 佛山市
  • 广东省

  • 广州市
  • 广东省

  • 惠州市
  • 广东省

  • 揭阳市
  • 广东省

  • 梅州市
  • 广东省

  • 汕头市
  • 广东省

  • 汕尾市
  • 广东省

  • 江门市
  • 广东省

  • 河源市
  • 广东省

  • 深圳市
  • 广东省

  • 清远市
  • 广东省

  • 湛江市
  • 广东省

  • 潮州市
  • 广东省

  • 珠海市
  • 广东省

  • 肇庆市
  • 广东省

  • 茂名市
  • 广东省

  • 阳江市
  • 广东省

  • 韶关市
  • 广西壮族自治区

  • 北海市
  • 广西壮族自治区

  • 南宁市
  • 广西壮族自治区

  • 崇左市
  • 广西壮族自治区

  • 来宾市
  • 广西壮族自治区

  • 柳州市
  • 广西壮族自治区

  • 桂林市
  • 广西壮族自治区

  • 梧州市
  • 广西壮族自治区

  • 河池市
  • 广西壮族自治区

  • 玉林市
  • 广西壮族自治区

  • 百色市
  • 广西壮族自治区

  • 贵港市
  • 广西壮族自治区

  • 贺州市
  • 广西壮族自治区

  • 钦州市
  • 广西壮族自治区

  • 防城港市
  • 新疆维吾尔自治区

  • 乌鲁木齐市
  • 新疆维吾尔自治区

  • 伊犁哈萨克自治州
  • 新疆维吾尔自治区

  • 克孜勒苏柯尔克孜自治州
  • 新疆维吾尔自治区

  • 克拉玛依市
  • 新疆维吾尔自治区

  • 博尔塔拉蒙古自治州
  • 新疆维吾尔自治区

  • 吐鲁番市
  • 新疆维吾尔自治区

  • 和田地区
  • 新疆维吾尔自治区

  • 哈密市
  • 新疆维吾尔自治区

  • 喀什地区
  • 新疆维吾尔自治区

  • 塔城地区
  • 新疆维吾尔自治区

  • 巴音郭楞蒙古自治州
  • 新疆维吾尔自治区

  • 昌吉回族自治州
  • 新疆维吾尔自治区

  • 自治区直辖县级行政区划
  • 新疆维吾尔自治区

  • 阿克苏地区
  • 新疆维吾尔自治区

  • 阿勒泰地区
  • 江苏省

  • 南京市
  • 江苏省

  • 南通市
  • 江苏省

  • 宿迁市
  • 江苏省

  • 常州市
  • 江苏省

  • 徐州市
  • 江苏省

  • 扬州市
  • 江苏省

  • 无锡市
  • 江苏省

  • 泰州市
  • 江苏省

  • 淮安市
  • 江苏省

  • 盐城市
  • 江苏省

  • 苏州市
  • 江苏省

  • 连云港市
  • 江苏省

  • 镇江市
  • 江西省

  • 上饶市
  • 江西省

  • 九江市
  • 江西省

  • 南昌市
  • 江西省

  • 吉安市
  • 江西省

  • 宜春市
  • 江西省

  • 抚州市
  • 江西省

  • 新余市
  • 江西省

  • 景德镇市
  • 江西省

  • 萍乡市
  • 江西省

  • 赣州市
  • 江西省

  • 鹰潭市
  • 河北省

  • 保定市
  • 河北省

  • 唐山市
  • 河北省

  • 廊坊市
  • 河北省

  • 张家口市
  • 河北省

  • 承德市
  • 河北省

  • 沧州市
  • 河北省

  • 石家庄市
  • 河北省

  • 秦皇岛市
  • 河北省

  • 衡水市
  • 河北省

  • 邢台市
  • 河北省

  • 邯郸市
  • 河南省

  • 三门峡市
  • 河南省

  • 信阳市
  • 河南省

  • 南阳市
  • 河南省

  • 周口市
  • 河南省

  • 商丘市
  • 河南省

  • 安阳市
  • 河南省

  • 平顶山市
  • 河南省

  • 开封市
  • 河南省

  • 新乡市
  • 河南省

  • 洛阳市
  • 河南省

  • 漯河市
  • 河南省

  • 濮阳市
  • 河南省

  • 焦作市
  • 河南省

  • 省直辖县级行政区划
  • 河南省

  • 许昌市
  • 河南省

  • 郑州市
  • 河南省

  • 驻马店市
  • 河南省

  • 鹤壁市
  • 浙江省

  • 丽水市
  • 浙江省

  • 台州市
  • 浙江省

  • 嘉兴市
  • 浙江省

  • 宁波市
  • 浙江省

  • 杭州市
  • 浙江省

  • 温州市
  • 浙江省

  • 湖州市
  • 浙江省

  • 绍兴市
  • 浙江省

  • 舟山市
  • 浙江省

  • 衢州市
  • 浙江省

  • 金华市
  • 海南省

  • 三亚市
  • 海南省

  • 三沙市
  • 海南省

  • 儋州市
  • 海南省

  • 海口市
  • 海南省

  • 省直辖县级行政区划
  • 湖北省

  • 十堰市
  • 湖北省

  • 咸宁市
  • 湖北省

  • 孝感市
  • 湖北省

  • 宜昌市
  • 湖北省

  • 恩施土家族苗族自治州
  • 湖北省

  • 武汉市
  • 湖北省

  • 省直辖县级行政区划
  • 湖北省

  • 荆州市
  • 湖北省

  • 荆门市
  • 湖北省

  • 襄阳市
  • 湖北省

  • 鄂州市
  • 湖北省

  • 随州市
  • 湖北省

  • 黄冈市
  • 湖北省

  • 黄石市
  • 湖南省

  • 娄底市
  • 湖南省

  • 岳阳市
  • 湖南省

  • 常德市
  • 湖南省

  • 张家界市
  • 湖南省

  • 怀化市
  • 湖南省

  • 株洲市
  • 湖南省

  • 永州市
  • 湖南省

  • 湘潭市
  • 湖南省

  • 湘西土家族苗族自治州
  • 湖南省

  • 益阳市
  • 湖南省

  • 衡阳市
  • 湖南省

  • 邵阳市
  • 湖南省

  • 郴州市
  • 湖南省

  • 长沙市
  • 甘肃省

  • 临夏回族自治州
  • 甘肃省

  • 兰州市
  • 甘肃省

  • 嘉峪关市
  • 甘肃省

  • 天水市
  • 甘肃省

  • 定西市
  • 甘肃省

  • 平凉市
  • 甘肃省

  • 庆阳市
  • 甘肃省

  • 张掖市
  • 甘肃省

  • 武威市
  • 甘肃省

  • 甘南藏族自治州
  • 甘肃省

  • 白银市
  • 甘肃省

  • 酒泉市
  • 甘肃省

  • 金昌市
  • 甘肃省

  • 陇南市
  • 福建省

  • 三明市
  • 福建省

  • 南平市
  • 福建省

  • 厦门市
  • 福建省

  • 宁德市
  • 福建省

  • 泉州市
  • 福建省

  • 漳州市
  • 福建省

  • 福州市
  • 福建省

  • 莆田市
  • 福建省

  • 龙岩市
  • 西藏自治区

  • 山南市
  • 西藏自治区

  • 拉萨市
  • 西藏自治区

  • 日喀则市
  • 西藏自治区

  • 昌都市
  • 西藏自治区

  • 林芝市
  • 西藏自治区

  • 那曲市
  • 西藏自治区

  • 阿里地区
  • 贵州省

  • 六盘水市
  • 贵州省

  • 安顺市
  • 贵州省

  • 毕节市
  • 贵州省

  • 贵阳市
  • 贵州省

  • 遵义市
  • 贵州省

  • 铜仁市
  • 贵州省

  • 黔东南苗族侗族自治州
  • 贵州省

  • 黔南布依族苗族自治州
  • 贵州省

  • 黔西南布依族苗族自治州
  • 辽宁省

  • 丹东市
  • 辽宁省

  • 大连市
  • 辽宁省

  • 抚顺市
  • 辽宁省

  • 朝阳市
  • 辽宁省

  • 本溪市
  • 辽宁省

  • 沈阳市
  • 辽宁省

  • 盘锦市
  • 辽宁省

  • 营口市
  • 辽宁省

  • 葫芦岛市
  • 辽宁省

  • 辽阳市
  • 辽宁省

  • 铁岭市
  • 辽宁省

  • 锦州市
  • 辽宁省

  • 阜新市
  • 辽宁省

  • 鞍山市
  • 重庆市

  • 重庆市

  • 市辖区
  • 陕西省

  • 咸阳市
  • 陕西省

  • 商洛市
  • 陕西省

  • 安康市
  • 陕西省

  • 宝鸡市
  • 陕西省

  • 延安市
  • 陕西省

  • 榆林市
  • 陕西省

  • 汉中市
  • 陕西省

  • 渭南市
  • 陕西省

  • 西安市
  • 陕西省

  • 铜川市
  • 青海省

  • 果洛藏族自治州
  • 青海省

  • 海东市
  • 青海省

  • 海北藏族自治州
  • 青海省

  • 海南藏族自治州
  • 青海省

  • 海西蒙古族藏族自治州
  • 青海省

  • 玉树藏族自治州
  • 青海省

  • 西宁市
  • 青海省

  • 黄南藏族自治州
  • 黑龙江省

  • 七台河市
  • 黑龙江省

  • 伊春市
  • 黑龙江省

  • 佳木斯市
  • 黑龙江省

  • 双鸭山市
  • 黑龙江省

  • 哈尔滨市
  • 黑龙江省

  • 大兴安岭地区
  • 黑龙江省

  • 大庆市
  • 黑龙江省

  • 牡丹江市
  • 黑龙江省

  • 绥化市
  • 黑龙江省

  • 鸡西市
  • 黑龙江省

  • 鹤岗市
  • 黑龙江省

  • 黑河市
  • 黑龙江省

  • 齐齐哈尔市